package com.youlu.campus.web.university.controller;

import com.youlu.campus.base.base.PageQueryRequest;
import com.youlu.campus.entity.UniversityInfo;
import com.youlu.campus.entity.VO.req.UniversityReq;
import com.youlu.campus.web.common.base.RequestContext;
import com.youlu.campus.web.university.service.UniversityService;
import com.youlu.campus.web.university.dto.UniversityQueryDTO;
import com.yuelin.infrastructure.quantum.common.QResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 大学信息控制层
 * 处理大学信息的查询、排行榜、保存及修改等操作
 *
 * @author: zgz
 * @date: 2020/11/27 15:19
 */
@Slf4j
@RestController
public class UniversityController {

    @Autowired
    private UniversityService universityService;


    /**
     * 获取大学列表
     * 根据查询条件获取匹配的大学列表
     * @param request 大学查询条件DTO
     * @return 大学列表数据
     */
    @PostMapping("/public/university/list")
    public QResult findAllByName(@RequestBody UniversityQueryDTO request) {
        return QResult.success(universityService.findAllByName(request));
    }

    /**
     * 获取大学活力排行榜
     * 分页查询大学活力排行榜信息
     * @param request 分页查询请求参数
     * @return 大学活力排行榜分页数据
     */
    @PostMapping("/public/university/ranking")
    public QResult getUniversityRankPage(@RequestBody PageQueryRequest request) {
        return QResult.success(universityService.getUniversityRankPage(request));
    }

    /**
     * 获取大学信息
     * 根据大学标识获取详细信息
     * @param universityValue 大学标识（如大学ID或名称等）
     * @return 大学详细信息
     */
    @GetMapping("/public/university/info")
    public QResult getUniversityInfo(String universityValue){
        return QResult.success(universityService.getUniversityInfo(universityValue));
    }

    /**
     * 保存或更新大学信息
     * 用于小程序端保存或更新大学信息
     * @param request 大学信息实体
     * @return 保存或更新结果
     */
    @PostMapping("/mini-app/university/save")
    public QResult universitySave(@RequestBody UniversityInfo request) {
        return QResult.success(universityService.saveOrUpdate(request));
    }

    /**
     * 查询可修改的大学信息
     * 小程序端查询当前用户可修改的大学信息
     * @param request 大学修改查询请求VO
     * @return 可修改的大学信息
     */
    @PostMapping("/mini-app/university/find/modify")
    public QResult universityModify(@RequestBody UniversityReq request) {
        request.setCurrentUserId(RequestContext.getUserId());
        return QResult.success(universityService.findModify(request));
    }

    /**
     * 公开查询可修改的大学信息
     * 公开接口查询可修改的大学信息（不验证当前用户）
     * @param request 大学修改查询请求VO
     * @return 可修改的大学信息
     */
    @PostMapping("/public/university/find/modify")
    public QResult publicUniversityModify(@RequestBody UniversityReq request) {
        // 注释说明：不设置当前用户ID，公开查询
        return QResult.success(universityService.findModify(request));
    }

}